React-এর `experimental_useEvent` হুকটির একটি গভীর বিশ্লেষণ, যা ব্যাখ্যা করে কিভাবে এটি স্টেল ক্লোজার সমস্যা সমাধান করে এবং আপনার React অ্যাপ্লিকেশনগুলিতে উন্নত পারফরম্যান্স ও পূর্বাভাসের জন্য স্টেবল ইভেন্ট হ্যান্ডলার রেফারেন্স প্রদান করে।
React-এর `experimental_useEvent`: স্টেবল ইভেন্ট হ্যান্ডলার রেফারেন্সে দক্ষতা অর্জন
React ডেভেলপাররা প্রায়শই ইভেন্ট হ্যান্ডলারগুলির সাথে কাজ করার সময় ভয়ংকর "স্টেল ক্লোজার" (stale closures) সমস্যার সম্মুখীন হন। এই সমস্যাটি তখন দেখা দেয় যখন একটি কম্পোনেন্ট পুনরায় রেন্ডার হয়, এবং ইভেন্ট হ্যান্ডলারগুলি তাদের আশেপাশের স্কোপ থেকে পুরানো মানগুলি ক্যাপচার করে। React-এর experimental_useEvent হুক, যা এই সমস্যা সমাধানের জন্য এবং একটি স্টেবল ইভেন্ট হ্যান্ডলার রেফারেন্স প্রদানের জন্য ডিজাইন করা হয়েছে, পারফরম্যান্স এবং পূর্বাভাসযোগ্যতা উন্নত করার জন্য একটি শক্তিশালী (যদিও বর্তমানে পরীক্ষামূলক) টুল। এই নিবন্ধটি experimental_useEvent-এর জটিলতাগুলি নিয়ে আলোচনা করে, এর উদ্দেশ্য, ব্যবহার, সুবিধা এবং সম্ভাব্য অসুবিধাগুলি ব্যাখ্যা করে।
স্টেল ক্লোজার সমস্যাটি বোঝা
experimental_useEvent নিয়ে আলোচনা করার আগে, আসুন এটি যে সমস্যাটি সমাধান করে তা সম্পর্কে আমাদের ধারণাটি পাকাপোক্ত করে নিই: স্টেল ক্লোজার। এই সরল পরিস্থিতিটি বিবেচনা করুন:
import React, { useState, useEffect } from 'react';
function MyComponent() {
const [count, setCount] = useState(0);
useEffect(() => {
const timer = setInterval(() => {
console.log("Count inside interval: ", count);
}, 1000);
return () => clearInterval(timer);
}, []); // Empty dependency array - runs only once on mount
return (
<div>
<p>Count: {count}</p>
<button onClick={() => setCount(count + 1)}>Increment</button>
</div>
);
}
export default MyComponent;
এই উদাহরণে, একটি খালি ডিপেন্ডেন্সি অ্যারে সহ useEffect হুকটি কেবল একবার চলে যখন কম্পোনেন্টটি মাউন্ট হয়। setInterval ফাংশনটি count-এর প্রাথমিক মান (যা 0) ক্যাপচার করে। এমনকি যখন আপনি "Increment" বোতামটি ক্লিক করেন এবং count স্টেট আপডেট করেন, setInterval কলব্যাকটি "Count inside interval: 0" লগ করতে থাকবে কারণ ক্লোজারের মধ্যে ক্যাপচার করা count মানটি অপরিবর্তিত থাকে। এটি একটি স্টেল ক্লোজারের ক্লাসিক উদাহরণ। ইন্টারভালটি পুনরায় তৈরি হয় না এবং নতুন 'count' মান পায় না।
এই সমস্যাটি শুধু ইন্টারভালের মধ্যেই সীমাবদ্ধ নয়। এটি এমন যেকোনো পরিস্থিতিতে দেখা যেতে পারে যেখানে একটি ফাংশন তার পার্শ্ববর্তী স্কোপ থেকে এমন একটি মান ক্যাপচার করে যা সময়ের সাথে পরিবর্তিত হতে পারে। সাধারণ পরিস্থিতিগুলির মধ্যে রয়েছে:
- ইভেন্ট হ্যান্ডলার (
onClick,onChange, ইত্যাদি) - থার্ড-পার্টি লাইব্রেরিতে পাস করা কলব্যাক
- অ্যাসিঙ্ক্রোনাস অপারেশন (
setTimeout,fetch)
experimental_useEvent-এর পরিচিতি
experimental_useEvent, যা React-এর পরীক্ষামূলক বৈশিষ্ট্যগুলির অংশ হিসাবে চালু হয়েছে, একটি স্টেবল ইভেন্ট হ্যান্ডলার রেফারেন্স প্রদান করে স্টেল ক্লোজার সমস্যাটি এড়ানোর একটি উপায় সরবরাহ করে। ধারণাগতভাবে এটি যেভাবে কাজ করে তা হলো:
- এটি একটি ফাংশন রিটার্ন করে যা সর্বদা ইভেন্ট হ্যান্ডলার লজিকের সর্বশেষ সংস্করণকে নির্দেশ করে, এমনকি পুনরায় রেন্ডার করার পরেও।
- এটি অপ্রয়োজনীয়ভাবে ইভেন্ট হ্যান্ডলার পুনরায় তৈরি হওয়া রোধ করে রি-রেন্ডার অপটিমাইজ করে, যা পারফরম্যান্সের উন্নতি ঘটায়।
- এটি আপনার কম্পোনেন্টগুলির মধ্যে উদ্বেগের একটি স্পষ্ট বিচ্ছেদ বজায় রাখতে সহায়তা করে।
গুরুত্বপূর্ণ নোট: নামটি যেমন ইঙ্গিত করে, experimental_useEvent এখনও পরীক্ষামূলক পর্যায়ে রয়েছে। এর মানে হলো যে এর API ভবিষ্যতে React রিলিজে পরিবর্তিত হতে পারে, এবং এটি এখনও প্রোডাকশন ব্যবহারের জন্য আনুষ্ঠানিকভাবে সুপারিশ করা হয়নি। তবে, এর উদ্দেশ্য এবং সম্ভাব্য সুবিধাগুলি বোঝা মূল্যবান।
কিভাবে experimental_useEvent ব্যবহার করবেন
এখানে experimental_useEvent কার্যকরভাবে ব্যবহার করার একটি ধাপে ধাপে নির্দেশিকা দেওয়া হলো:
- ইনস্টলেশন:
প্রথমে, নিশ্চিত করুন যে আপনার কাছে React-এর এমন একটি সংস্করণ রয়েছে যা পরীক্ষামূলক বৈশিষ্ট্য সমর্থন করে। আপনার হয়তো
reactএবংreact-dom-এর পরীক্ষামূলক প্যাকেজগুলি ইনস্টল করতে হতে পারে (পরীক্ষামূলক রিলিজ সম্পর্কিত সর্বশেষ নির্দেশাবলী এবং সতর্কতার জন্য অফিসিয়াল React ডকুমেন্টেশন দেখুন):npm install react@experimental react-dom@experimental - হুকটি ইম্পোর্ট করা:
reactপ্যাকেজ থেকেexperimental_useEventহুকটি ইম্পোর্ট করুন:import { experimental_useEvent } from 'react'; - ইভেন্ট হ্যান্ডলারটি সংজ্ঞায়িত করা:
আপনার ইভেন্ট হ্যান্ডলার ফাংশনটি স্বাভাবিকভাবেই সংজ্ঞায়িত করুন, যেকোনো প্রয়োজনীয় স্টেট বা প্রপস উল্লেখ করে।
experimental_useEventব্যবহার করা:আপনার ইভেন্ট হ্যান্ডলার ফাংশনটি পাস করে
experimental_useEventকল করুন। এটি একটি স্টেবল ইভেন্ট হ্যান্ডলার ফাংশন রিটার্ন করে যা আপনি আপনার JSX-এ ব্যবহার করতে পারেন।
এখানে একটি উদাহরণ দেওয়া হলো যা দেখায় কিভাবে আগের ইন্টারভাল উদাহরণে স্টেল ক্লোজার সমস্যাটি সমাধান করতে experimental_useEvent ব্যবহার করা যায়:
import React, { useState, useEffect, experimental_useEvent } from 'react';
function MyComponent() {
const [count, setCount] = useState(0);
const intervalCallback = () => {
console.log("Count inside interval: ", count);
};
const stableIntervalCallback = experimental_useEvent(intervalCallback);
useEffect(() => {
const timer = setInterval(() => {
stableIntervalCallback();
}, 1000);
return () => clearInterval(timer);
}, []); // Empty dependency array - runs only once on mount
return (
<div>
<p>Count: {count}</p>
<button onClick={() => setCount(count + 1)}>Increment</button>
</div>
);
}
export default MyComponent;
এখন, যখন আপনি "Increment" বোতামটি ক্লিক করবেন, setInterval কলব্যাকটি সঠিকভাবে আপডেট হওয়া count মানটি লগ করবে। এর কারণ হলো stableIntervalCallback সর্বদা intervalCallback ফাংশনের সর্বশেষ সংস্করণটিকে নির্দেশ করে।
experimental_useEvent ব্যবহারের সুবিধা
experimental_useEvent ব্যবহারের প্রাথমিক সুবিধাগুলি হলো:
- স্টেল ক্লোজার দূর করে: এটি নিশ্চিত করে যে ইভেন্ট হ্যান্ডলারগুলি সর্বদা তাদের আশেপাশের স্কোপ থেকে সর্বশেষ মানগুলি ক্যাপচার করে, অপ্রত্যাশিত আচরণ এবং বাগ প্রতিরোধ করে।
- উন্নত পারফরম্যান্স: একটি স্টেবল রেফারেন্স প্রদান করে, এটি চাইল্ড কম্পোনেন্টগুলির অপ্রয়োজনীয় রি-রেন্ডার এড়িয়ে যায় যা ইভেন্ট হ্যান্ডলারের উপর নির্ভরশীল। এটি বিশেষত সেই অপটিমাইজড কম্পোনেন্টগুলির জন্য উপকারী যা
React.memoবাuseMemoব্যবহার করে। - সরলীকৃত কোড: এটি প্রায়শই আপনার কোডকে সরল করতে পারে, যেমন পরিবর্তনশীল মান সংরক্ষণের জন্য
useRefহুক ব্যবহার করা বাuseEffect-এ ম্যানুয়ালি ডিপেন্ডেন্সি আপডেট করার প্রয়োজনীয়তা দূর করে। - বর্ধিত পূর্বাভাসযোগ্যতা: কম্পোনেন্টের আচরণকে আরও পূর্বাভাসযোগ্য এবং বোঝা সহজ করে তোলে, যা আরও রক্ষণাবেক্ষণযোগ্য কোডের দিকে পরিচালিত করে।
কখন experimental_useEvent ব্যবহার করবেন
experimental_useEvent ব্যবহার করার কথা বিবেচনা করুন যখন:
- আপনি আপনার ইভেন্ট হ্যান্ডলার বা কলব্যাকগুলিতে স্টেল ক্লোজারের সম্মুখীন হচ্ছেন।
- আপনি অপ্রয়োজনীয় রি-রেন্ডার প্রতিরোধ করে ইভেন্ট হ্যান্ডলারের উপর নির্ভরশীল কম্পোনেন্টগুলির পারফরম্যান্স অপটিমাইজ করতে চান।
- আপনি ইভেন্ট হ্যান্ডলারের মধ্যে জটিল স্টেট আপডেট বা অ্যাসিঙ্ক্রোনাস অপারেশন নিয়ে কাজ করছেন।
- আপনার একটি ফাংশনের একটি স্টেবল রেফারেন্স প্রয়োজন যা রেন্ডার জুড়ে পরিবর্তন হওয়া উচিত নয়, তবে এটির সর্বশেষ স্টেটে অ্যাক্সেস প্রয়োজন।
তবে, এটি মনে রাখা গুরুত্বপূর্ণ যে experimental_useEvent এখনও পরীক্ষামূলক। প্রোডাকশন কোডে এটি ব্যবহার করার আগে সম্ভাব্য ঝুঁকি এবং ট্রেড-অফগুলি বিবেচনা করুন।
সম্ভাব্য অসুবিধা এবং বিবেচ্য বিষয়
যদিও experimental_useEvent উল্লেখযোগ্য সুবিধা দেয়, এর সম্ভাব্য অসুবিধাগুলি সম্পর্কে সচেতন থাকা অত্যন্ত গুরুত্বপূর্ণ:
- পরীক্ষামূলক স্ট্যাটাস: API ভবিষ্যতে React রিলিজে পরিবর্তন সাপেক্ষ। এটি ব্যবহার করলে পরে আপনার কোড রিফ্যাক্টর করার প্রয়োজন হতে পারে।
- বর্ধিত জটিলতা: যদিও এটি কিছু ক্ষেত্রে কোডকে সরল করতে পারে, বিচক্ষণতার সাথে ব্যবহার না করলে এটি জটিলতাও যোগ করতে পারে।
- সীমিত ব্রাউজার সমর্থন: যেহেতু এটি নতুন জাভাস্ক্রিপ্ট বৈশিষ্ট্য বা React ইন্টারনালের উপর নির্ভর করে, পুরানো ব্রাউজারগুলিতে সামঞ্জস্যতার সমস্যা হতে পারে (যদিও React-এর পলিফিলগুলি সাধারণত এটি সমাধান করে)।
- অতিরিক্ত ব্যবহারের সম্ভাবনা: প্রতিটি ইভেন্ট হ্যান্ডলারকে
experimental_useEventদিয়ে মোড়ানোর প্রয়োজন নেই। এর অতিরিক্ত ব্যবহার অপ্রয়োজনীয় জটিলতার কারণ হতে পারে।
experimental_useEvent-এর বিকল্প
আপনি যদি একটি পরীক্ষামূলক বৈশিষ্ট্য ব্যবহার করতে দ্বিধা বোধ করেন, তবে বেশ কয়েকটি বিকল্প রয়েছে যা স্টেল ক্লোজার সমস্যা সমাধানে সহায়তা করতে পারে:
useRefব্যবহার করা:**আপনি
useRefহুক ব্যবহার করে একটি পরিবর্তনশীল মান সংরক্ষণ করতে পারেন যা রি-রেন্ডার জুড়ে স্থায়ী হয়। এটি আপনাকে আপনার ইভেন্ট হ্যান্ডলারের মধ্যে স্টেট বা প্রপসের সর্বশেষ মান অ্যাক্সেস করতে দেয়। তবে, যখনই প্রাসঙ্গিক স্টেট বা প্রপ পরিবর্তিত হয়, আপনাকে ম্যানুয়ালি রেফের.currentপ্রপার্টি আপডেট করতে হবে। এটি জটিলতা তৈরি করতে পারে।import React, { useState, useEffect, useRef } from 'react'; function MyComponent() { const [count, setCount] = useState(0); const countRef = useRef(count); useEffect(() => { countRef.current = count; }, [count]); useEffect(() => { const timer = setInterval(() => { console.log("Count inside interval: ", countRef.current); }, 1000); return () => clearInterval(timer); }, []); return ( <div> <p>Count: {count}</p> <button onClick={() => setCount(count + 1)}>Increment</button> </div> ); } export default MyComponent;- ইনলাইন ফাংশন:**
কিছু ক্ষেত্রে, আপনি JSX-এর মধ্যে ইভেন্ট হ্যান্ডলারকে ইনলাইনভাবে সংজ্ঞায়িত করে স্টেল ক্লোজার এড়াতে পারেন। এটি নিশ্চিত করে যে ইভেন্ট হ্যান্ডলারের সর্বদা সর্বশেষ মানগুলিতে অ্যাক্সেস থাকে। তবে, যদি ইভেন্ট হ্যান্ডলারটি কম্পিউটেশনালি ব্যয়বহুল হয় তবে এটি পারফরম্যান্স সমস্যার কারণ হতে পারে, কারণ এটি প্রতিটি রেন্ডারে পুনরায় তৈরি হবে।
import React, { useState } from 'react'; function MyComponent() { const [count, setCount] = useState(0); return ( <div> <p>Count: {count}</p> <button onClick={() => { console.log("Current count: ", count); setCount(count + 1); }}>Increment</button> </div> ); } export default MyComponent; - ফাংশন আপডেট:**
পূর্ববর্তী স্টেটের উপর নির্ভরশীল স্টেট আপডেটের জন্য, আপনি
setState-এর ফাংশন আপডেট ফর্ম ব্যবহার করতে পারেন। এটি নিশ্চিত করে যে আপনি একটি স্টেল ক্লোজারের উপর নির্ভর না করে সবচেয়ে সাম্প্রতিক স্টেট মানের সাথে কাজ করছেন।import React, { useState } from 'react'; function MyComponent() { const [count, setCount] = useState(0); return ( <div> <p>Count: {count}</p> <button onClick={() => setCount(prevCount => prevCount + 1)}>Increment</button> </div> ); } export default MyComponent;
বাস্তব-জগতের উদাহরণ এবং ব্যবহারের ক্ষেত্র
আসুন কিছু বাস্তব-জগতের উদাহরণ বিবেচনা করি যেখানে experimental_useEvent (বা এর বিকল্পগুলি) বিশেষভাবে কার্যকর হতে পারে:
- অটোসাজেস্ট/অটোকমপ্লিট কম্পোনেন্ট: একটি অটোসাজেস্ট বা অটোকমপ্লিট কম্পোনেন্ট বাস্তবায়ন করার সময়, আপনাকে প্রায়শই ব্যবহারকারীর ইনপুটের উপর ভিত্তি করে ডেটা ফেচ করতে হয়। ইনপুটের
onChangeইভেন্ট হ্যান্ডলারে পাস করা কলব্যাক ফাংশনটি ইনপুট ফিল্ডের একটি স্টেল মান ক্যাপচার করতে পারে।experimental_useEventব্যবহার করে নিশ্চিত করা যেতে পারে যে কলব্যাকটির সর্বদা সর্বশেষ ইনপুট মানের অ্যাক্সেস রয়েছে, যা ভুল অনুসন্ধানের ফলাফল প্রতিরোধ করে। - ডিবouncing/থ্রটলিং ইভেন্ট হ্যান্ডলার: ইভেন্ট হ্যান্ডলার ডিবouncing বা থ্রটলিং করার সময় (যেমন, API কলের ফ্রিকোয়েন্সি সীমিত করতে), আপনাকে একটি ভেরিয়েবলে একটি টাইমার আইডি সংরক্ষণ করতে হবে। যদি টাইমার আইডিটি একটি স্টেল ক্লোজার দ্বারা ক্যাপচার করা হয়, তবে ডিবouncing বা থ্রটলিং লজিক সঠিকভাবে কাজ নাও করতে পারে।
experimental_useEventটাইমার আইডিটি সর্বদা আপ-টু-ডেট আছে তা নিশ্চিত করতে সহায়তা করতে পারে। - জটিল ফর্ম হ্যান্ডলিং: একাধিক ইনপুট ফিল্ড এবং ভ্যালিডেশন লজিক সহ জটিল ফর্মগুলিতে, আপনাকে একটি নির্দিষ্ট ইনপুট ফিল্ডের
onChangeইভেন্ট হ্যান্ডলারের মধ্যে অন্যান্য ইনপুট ফিল্ডের মানগুলি অ্যাক্সেস করতে হতে পারে। যদি এই মানগুলি স্টেল ক্লোজার দ্বারা ক্যাপচার করা হয়, তবে ভ্যালিডেশন লজিক ভুল ফলাফল তৈরি করতে পারে। - থার্ড-পার্টি লাইব্রেরির সাথে ইন্টিগ্রেশন: কলব্যাকের উপর নির্ভরশীল থার্ড-পার্টি লাইব্রেরির সাথে ইন্টিগ্রেট করার সময়, যদি কলব্যাকগুলি সঠিকভাবে পরিচালিত না হয় তবে আপনি স্টেল ক্লোজারের সম্মুখীন হতে পারেন।
experimental_useEventকলব্যাকগুলির সর্বদা সর্বশেষ মানগুলিতে অ্যাক্সেস আছে তা নিশ্চিত করতে সহায়তা করতে পারে।
ইভেন্ট হ্যান্ডলিংয়ের জন্য আন্তর্জাতিক বিবেচ্য বিষয়
একটি বিশ্বব্যাপী দর্শকদের জন্য React অ্যাপ্লিকেশন তৈরি করার সময়, ইভেন্ট হ্যান্ডলিংয়ের জন্য নিম্নলিখিত আন্তর্জাতিক বিবেচ্য বিষয়গুলি মনে রাখবেন:
- কীবোর্ড লেআউট: বিভিন্ন ভাষার বিভিন্ন কীবোর্ড লেআউট রয়েছে। নিশ্চিত করুন যে আপনার ইভেন্ট হ্যান্ডলারগুলি বিভিন্ন কীবোর্ড লেআউট থেকে ইনপুট সঠিকভাবে পরিচালনা করে। উদাহরণস্বরূপ, বিশেষ অক্ষরের জন্য ক্যারেক্টার কোড ভিন্ন হতে পারে।
- ইনপুট মেথড এডিটর (IMEs): IMEs এমন অক্ষর ইনপুট করতে ব্যবহৃত হয় যা কীবোর্ডে সরাসরি পাওয়া যায় না, যেমন চীনা বা জাপানি অক্ষর। নিশ্চিত করুন যে আপনার ইভেন্ট হ্যান্ডলারগুলি IMEs থেকে ইনপুট সঠিকভাবে পরিচালনা করে।
compositionstart,compositionupdate, এবংcompositionendইভেন্টগুলির দিকে মনোযোগ দিন। - ডান-থেকে-বামে (RTL) ভাষা: যদি আপনার অ্যাপ্লিকেশন আরবি বা হিব্রুর মতো RTL ভাষা সমর্থন করে, তবে আপনাকে মিরর করা লেআউটের জন্য আপনার ইভেন্ট হ্যান্ডলারগুলি সামঞ্জস্য করতে হতে পারে। ইভেন্টের উপর ভিত্তি করে উপাদানগুলির অবস্থান নির্ধারণ করার সময় ভৌত বৈশিষ্ট্যের পরিবর্তে CSS-এর যৌক্তিক বৈশিষ্ট্যগুলি বিবেচনা করুন।
- অ্যাক্সেসিবিলিটি (a11y): নিশ্চিত করুন যে আপনার ইভেন্ট হ্যান্ডলারগুলি প্রতিবন্ধী ব্যবহারকারীদের জন্য অ্যাক্সেসযোগ্য। আপনার ইভেন্ট হ্যান্ডলারগুলির উদ্দেশ্য এবং আচরণ সম্পর্কে সহায়ক প্রযুক্তিগুলিতে তথ্য সরবরাহ করতে সিমেন্টিক HTML এলিমেন্ট এবং ARIA অ্যাট্রিবিউট ব্যবহার করুন। কীবোর্ড নেভিগেশন কার্যকরভাবে ব্যবহার করুন।
- টাইম জোন: যদি আপনার অ্যাপ্লিকেশনে সময়-সংবেদনশীল ইভেন্ট জড়িত থাকে, তবে টাইম জোন এবং ডেলাইট সেভিং টাইম সম্পর্কে সচেতন থাকুন। টাইম জোন রূপান্তর পরিচালনা করতে উপযুক্ত লাইব্রেরি (যেমন,
moment-timezoneবাdate-fns-tz) ব্যবহার করুন। - সংখ্যা এবং তারিখ ফরম্যাটিং: সংখ্যা এবং তারিখের বিন্যাস বিভিন্ন সংস্কৃতিতে উল্লেখযোগ্যভাবে ভিন্ন হতে পারে। ব্যবহারকারীর লোকেল অনুযায়ী সংখ্যা এবং তারিখ ফরম্যাট করতে উপযুক্ত লাইব্রেরি (যেমন,
Intl.NumberFormatএবংIntl.DateTimeFormat) ব্যবহার করুন।
উপসংহার
experimental_useEvent React-এ স্টেল ক্লোজার সমস্যা সমাধান এবং আপনার অ্যাপ্লিকেশনগুলির পারফরম্যান্স এবং পূর্বাভাসযোগ্যতা উন্নত করার জন্য একটি প্রতিশ্রুতিশীল টুল। যদিও এখনও পরীক্ষামূলক, এটি কার্যকরভাবে ইভেন্ট হ্যান্ডলার রেফারেন্স পরিচালনার জন্য একটি আকর্ষণীয় সমাধান সরবরাহ করে। যেকোনো নতুন প্রযুক্তির মতো, প্রোডাকশনে এটি ব্যবহার করার আগে এর সুবিধা, অসুবিধা এবং বিকল্পগুলি সাবধানে বিবেচনা করা গুরুত্বপূর্ণ। experimental_useEvent এবং এর দ্বারা সমাধান করা অন্তর্নিহিত সমস্যাগুলির সূক্ষ্মতাগুলি বোঝার মাধ্যমে, আপনি বিশ্বব্যাপী দর্শকদের জন্য আরও শক্তিশালী, পারফরম্যান্ট এবং রক্ষণাবেক্ষণযোগ্য React কোড লিখতে পারেন।
পরীক্ষামূলক বৈশিষ্ট্যগুলি সম্পর্কিত সর্বশেষ আপডেট এবং সুপারিশের জন্য অফিসিয়াল React ডকুমেন্টেশন দেখতে ভুলবেন না। হ্যাপি কোডিং!